//package com.example.lsrsbackend.controller;
//
//
//import com.example.lsrsbackend.service.impl.SeatServiceImpl;
//import jakarta.websocket.server.ServerEndpoint;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.socket.server.standard.SpringConfigurator;
//
//// WebSocket控制器
//@Component
//@ServerEndpoint(value = "/ws/seat", configurator = SpringConfigurator.class)
//@Slf4j
//public class SeatWebSocketController {
//
//    private static SeatServiceImpl seatService;
//    private static RabbitTemplate rabbitTemplate;
//    private static Map<String, Session> userSessions = new ConcurrentHashMap<>();
//
//    @Autowired
//    public void setSeatService(SeatService seatService) {
//        SeatWebSocketController.seatService = seatService;
//    }
//
//    @Autowired
//    public void setRabbitTemplate(RabbitTemplate rabbitTemplate) {
//        SeatWebSocketController.rabbitTemplate = rabbitTemplate;
//    }
//
//    @OnOpen
//    public void onOpen(Session session, EndpointConfig config) {
//        String userId = (String) config.getUserProperties().get("userId");
//        if (userId != null) {
//            userSessions.put(userId, session);
//            log.info("WebSocket连接建立, userId: {}", userId);
//
//            // 推送当前座位状态
//            pushSeatStatusToUser(userId);
//        }
//    }
//
//    @OnMessage
//    public void onMessage(String message, Session session) {
//        try {
//            WebSocketMessage msg = JsonUtil.fromJson(message, WebSocketMessage.class);
//            String userId = getUserIdFromSession(session);
//
//            if (userId == null) {
//                sendError(session, "用户未认证");
//                return;
//            }
//
//            switch (msg.getType()) {
//                case "RESERVE_REQUEST":
//                    handleReservationRequest(userId, msg.getData());
//                    break;
//                case "CANCEL_REQUEST":
//                    handleCancelRequest(userId, msg.getData());
//                    break;
//                case "HEARTBEAT":
//                    sendMessage(session, WebSocketMessage.heartbeat());
//                    break;
//                default:
//                    sendError(session, "未知的消息类型");
//            }
//        } catch (Exception e) {
//            log.error("处理WebSocket消息失败", e);
//            sendError(session, "消息处理失败");
//        }
//    }
//
//    @OnClose
//    public void onClose(Session session) {
//        String userId = getUserIdFromSession(session);
//        if (userId != null) {
//            userSessions.remove(userId);
//            log.info("WebSocket连接关闭, userId: {}", userId);
//        }
//    }
//
//    @OnError
//    public void onError(Session session, Throwable error) {
//        log.error("WebSocket错误", error);
//        String userId = getUserIdFromSession(session);
//        if (userId != null) {
//            userSessions.remove(userId);
//        }
//    }
//
//    private void handleReservationRequest(String userId, Object data) {
//        ReservationRequest request = JsonUtil.convertValue(data, ReservationRequest.class);
//        request.setUserId(userId);
//
//        // 发送到RabbitMQ处理
//        rabbitTemplate.convertAndSend("seat.exchange", "reservation", request);
//
//        // 立即返回处理中状态
//        sendToUser(userId, WebSocketMessage.processing("预约请求处理中"));
//    }
//
//    // 向用户发送消息
//    public static void sendToUser(String userId, WebSocketMessage message) {
//        Session session = userSessions.get(userId);
//        if (session != null && session.isOpen()) {
//            sendMessage(session, message);
//        }
//    }
//
//    // 广播座位状态更新
//    public static void broadcastSeatUpdate(SeatStatusDTO status) {
//        WebSocketMessage message = WebSocketMessage.seatUpdate(status);
//        String jsonMessage = JsonUtil.toJson(message);
//
//        userSessions.values().forEach(session -> {
//            if (session.isOpen()) {
//                try {
//                    session.getBasicRemote().sendText(jsonMessage);
//                } catch (IOException e) {
//                    log.error("广播消息失败", e);
//                }
//            }
//        });
//    }
//
//    private static void sendMessage(Session session, WebSocketMessage message) {
//        try {
//            session.getBasicRemote().sendText(JsonUtil.toJson(message));
//        } catch (IOException e) {
//            log.error("发送WebSocket消息失败", e);
//        }
//    }
//
//    private void sendError(Session session, String error) {
//        sendMessage(session, WebSocketMessage.error(error));
//    }
//
//    private String getUserIdFromSession(Session session) {
//        return userSessions.entrySet().stream()
//                .filter(entry -> entry.getValue().equals(session))
//                .map(Map.Entry::getKey)
//                .findFirst()
//                .orElse(null);
//    }
//
//    private void pushSeatStatusToUser(String userId) {
//        try {
//            List<SeatVO> seats = seatService.getAllSeatStatus();
//            sendToUser(userId, WebSocketMessage.seatStatus(seats));
//        } catch (Exception e) {
//            log.error("推送座位状态失败", e);
//        }
//    }
//}
